package Util;

import lombok.Setter;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;

/**
 * 简化版订单编号生成器
 * 格式：S02 + 年份后3位 + 月份2位 + 日期2位 + 序号3位
 * 示例：S020230501001
 */
public class SimpleOrderCodeGenerator {
    
    private static final String PREFIX = "S02";
    /**
     * -- SETTER --
     *  设置序号
     *
     * @param newSequence 新的序号
     */
    @Setter
    private static int sequence = 1;
    private static String currentDate = "";
    
    /**
     * 生成订单编号
     * @return 订单编号
     */
    public static String generateOrderCode() {
        LocalDateTime now = LocalDateTime.now();
        String dateStr = now.format(DateTimeFormatter.ofPattern("yyMMdd"));

        // 如果日期变化，重置序号
        if (!dateStr.equals(currentDate)) {
            sequence = 1;
            currentDate = dateStr;
        }

        String sequenceStr = String.format("%03d", sequence);

        // 追加 5 位随机数字串
        int randomNum = new Random().nextInt(10000); // [0-9999]
        String randomStr = String.format("%05d", randomNum);

        sequence++; // 序号递增

        return PREFIX + dateStr + sequenceStr + randomStr;
    }
    
    /**
     * 生成指定日期的订单编号
     * @param dateTime 指定日期时间
     * @return 订单编号
     */
    public static String generateOrderCode(LocalDateTime dateTime) {
        String dateStr = dateTime.format(DateTimeFormatter.ofPattern("yyMMdd"));
        
        // 格式化序号为3位数字，不足补0
        String sequenceStr = String.format("%03d", sequence);
        
        // 组合订单编号
        String orderCode = PREFIX + dateStr + sequenceStr;
        
        // 序号递增
        sequence++;
        
        return orderCode;
    }
    
    /**
     * 重置序号
     */
    public static void resetSequence() {
        sequence = 1;
        currentDate = "";
    }

    /**
     * 获取当前序号
     * @return 当前序号
     */
    public static int getCurrentSequence() {
        return sequence;
    }
} 